﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;

namespace BOL.Ventas
{
    public class GetOrdenVentaExcel
    {

        int _count;




        public int Count(int idProyecto,
                        int idEtapa,
                        int idTipoVivienda,
                        int cuentaAhorroStr,
                        int idestado,
                        string clienteStr,
                        string cuiStr,
                        string numDocumento)
        {
            return _count;
        }



        private IQueryable<OrdenVentaExcel> ApplySelect_ListInfo()
        {
            DAL.Menu ordenVentaRead = DbUtil.Db.Menus.Single(p => p.idInternal == 114);

            var q = from a in DbUtil.Db.OrdenVentaItems
                    select new OrdenVentaExcel
                    {
                        bancoFinan = (a.OrdenVenta.idFormatoVenta==1) ? "":a.OrdenVenta.Banco.descripcion,
                        cliente = a.OrdenVenta.Cliente.descripcion,
                        cliente2=a.OrdenVenta.idCoCliente==null?"":a.OrdenVenta.Cliente1.descripcion,
                        AceptaVenta=a.OrdenVenta.idEstado==7?a.OrdenVenta.Empleado1.descripcion:"",
                        bitfinanciado=a.bitFinanciado==true?"Si":"No",
                        comentario=a.OrdenVenta.comentario,
                        cuentaAhorra=a.OrdenVenta.cuentaAhorro==1?"Si":"No",
                        cuentaAhorraInt=a.OrdenVenta.cuentaAhorro,
                         estado=a.OrdenVenta.EstadoItem.descripcion.ToUpper(),
                        fecha=a.OrdenVenta.fecha,
                        fechaAnula=a.OrdenVenta.fechaAnula,
                        fechaVenta=a.OrdenVenta.fechaVenta,
                        formatoVenta=a.OrdenVenta.FormatoVenta.descripcion,
                        moneda=a.OrdenVenta.Moneda.descripcion,
                        UI=a.UI.descripcion.ToUpper(),
                        usuarioAnula=a.OrdenVenta.idEstado==11?a.OrdenVenta.usuarioAnula:"",
                        vendedor=a.OrdenVenta.Empleado.descripcion,
                        totalStr=string.Format("{0:N}",a.total),
                          bitAnulado=a.OrdenVenta.idEstado==10?true:false,
                        idProyecto=a.OrdenVenta.idProyecto,
                         idEtapa=a.UI.idEtapa,
                        idTipoVivienda = a.UI.idTipoUI,
                        idEstado = a.OrdenVenta.idEstado,
                        numDocumento=string.Format("OV-{0}",a.OrdenVenta.numDocumento),
                         etapa=a.UI.Etapa.descripcion,
                          UILocalizacion=a.UI.UILocalizacion.descripcion.ToUpper(),
                        totalPago = a.OrdenVentaFormatos.Sum(p => p.totalPago),
                        saldo = a.OrdenVentaFormatos.Sum(p =>p.total-p.totalFin- p.totalPago),
                        
                       
                    };
            return q;
        }

        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<OrdenVentaExcel> Execute(int idProyecto,
                                                         DateTime fechaInicio,
                                                        DateTime fechaFin,
                                                        int idEtapa,
                                                        int idTipoVivienda,
                                                        int cuentaAhorroStr,
                                                        int idestado,
                                                        string clienteStr, 
                                                        string cuiStr, 
                                                        string numDocumento)
        {


            if (!clienteStr.HasValue())
                clienteStr = "";
            if (!cuiStr.HasValue())
                cuiStr = "";
            if (!numDocumento.HasValue())
                numDocumento = "";
            var q = ApplySelect_ListInfo();


            q = q.Where(a => (a.UI.Contains(cuiStr))
                              & (cuentaAhorroStr == 0 ? a.cuentaAhorraInt != 0 : a.cuentaAhorraInt == cuentaAhorroStr)
                              & a.cliente.Contains(clienteStr)
                              & a.idProyecto == idProyecto
                             // & a.bitAnulado==true
                              & (a.fecha>=fechaInicio & a.fecha<=fechaFin)
                               & (idEtapa == 0 ? a.idEtapa != 0 : (idEtapa == -1 ? (a.idEtapa != 10) : a.idEtapa == Convert.ToInt32(idEtapa))) //para el caso de separado y vendido
                              & (idTipoVivienda == 0 ? a.idTipoVivienda != 0 : a.idTipoVivienda == Convert.ToInt32(idTipoVivienda))
                              & (idestado == 0 ? a.idEstado != 0 : a.idEstado == Convert.ToInt32(idestado))
                              );


            _count = q.Count();

            
            return q;
        }
    }
}
